package 面向对象高级特性;

// 定义一个名为Bicycle的类。这个类表示一个普通的自行车。  
class Bicycle {
    // 在Bicycle类中定义一个名为wheel的String类型的实例变量，并初始化为"两轮车"。  
    String wheel = "两轮车";

    // 在Bicycle类中定义一个名为brake的void方法，该方法打印出"自行车刹车"。  
    void brake(){
        System.out.println("自行车刹车");
    }
}

// 定义一个名为ElectroBicycle的公共类，该类继承自Bicycle类。ElectroBicycle表示一种特殊的自行车，即电动自行车。  
public class ElectroBicycle extends Bicycle{
    // 在ElectroBicycle类中定义一个名为battery的String类型的实例变量，并初始化为"还剩20%电量"。  
    String battery = "还剩20%电量";

    // 定义主函数，它是程序的入口点。该函数接受一个String数组作为参数。  
    public static void main(String[] args) {
        // 创建一个ElectroBicycle对象，并将其引用赋值给一个Bicycle类型的变量bicycle。这是向上转型，因为ElectroBicycle是Bicycle的子类。  
        Bicycle bicycle = new ElectroBicycle();
        // 打印出"自行车的车轮是"和bicycle对象的wheel属性的值。因为bicycle实际上是一个ElectroBicycle对象，所以它会打印出"电动车的车轮是"。  
        System.out.println("自行车的车轮是"+bicycle.wheel);
        // 调用bicycle对象的brake方法。由于ElectroBicycle继承了Bicycle，所以bicycle对象也有这个方法。因此，它会打印出"自行车刹车"。  
        bicycle.brake();
        // 创建一个新的ElectroBicycle对象，并将其引用赋值给一个ElectroBicycle类型的变量electroBicycle。这是类型转换，因为我们已经知道它是一个ElectroBicycle对象。  
        ElectroBicycle electroBicycle = new ElectroBicycle();
        // 打印出"电动车的车轮是"和electroBicycle对象的wheel属性的值。它会打印出"电动车的车轮是"。  
        System.out.println("电动自行车的车轮是"+electroBicycle.wheel);
        // 打印出"电动车的电量是"和electroBicycle对象的battery属性的值。它会打印出"电动车的电量是还剩20%电量"。  
        System.out.println("电动自行车的电量是"+electroBicycle.battery);
        // 调用electroBicycle对象的brake方法。它会打印出"自行车刹车"。  
        electroBicycle.brake();
    }
}